# @Time    : 2022/8/21 13:01
# @Author  : 南黎
# @FileName: 1.获取窗口句柄.py
import win32gui
#如果失败，要做好异常处理

#1.根据窗口标题获取句柄，通过标题查找，仅返回一个顶层窗口的句柄，不支持模糊查询
try:
    # 获取窗口句柄
    handle = win32gui.FindWindow("Notepad", None)#通过窗口标题获取窗口句柄
    print("窗口句柄是：{}".format(handle))
except Exception as e:
    print("窗口句柄获取失败：{}".format(e))

#2.通过父窗口找子窗口，根据窗口类名和标题检索句柄，查找
# 参数
# 家长：PyHANDLE
# 将搜索其子窗口的窗口。如果为 0，则假定为桌面窗口。
# ChildAfter : PyHANDLE
# 子窗口后按Z顺序搜索，可以为0搜索全部
# 类名：PyResourceId
# 要查找的窗口类的名称或原子，可以是 None
# 窗口名称：字符串
# 要查找的窗口标题，可以是 None
try:
    # 获取窗口句柄
    # handle = win32gui.FindWindowEx(0, 0, "Notepad", '新建文本文档.txt - 记事本')
    handle = win32gui.FindWindowEx(0, 0, "Notepad", None)
    #注意，当你修改了记事本后标题名字前加上了一个*变成了“*新建文本文档.txt - 记事本”，所以这里可以填写None缺省，只用类名查找
    print("窗口句柄是：{}".format(handle))
except Exception as e:
    print("窗口句柄获取失败：{}".format(e))


#3.根据窗口左上角坐标获取句柄，(0, 0)只获取最顶层的左上角窗口，这种方法我个人不建议使用，因为顶层的窗口变化了，句柄就变化了
try:
    # 获取窗口句柄
    handle = win32gui.WindowFromPoint((0, 0))
    print("窗口句柄是：{}".format(handle))
except Exception as e:
    print("窗口句柄获取失败：{}".format(e))